package com.gin.no_gay_alliance.listener;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

/**
 * RecyclerView的滚动监听器
 */
public class MyScrollListener extends RecyclerView.OnScrollListener {
    private OnDraggedListener onDraggedListener;
    private OnDraggingListener onDraggingListener;
    private OnScrollToBottomListener onScrollToBottomListener;
    private int distanceX;
    private int distanceY;

    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
        if (newState == RecyclerView.SCROLL_STATE_IDLE) {
            // 结束拖动
            if (onDraggedListener != null) {
                onDraggedListener.onDragged(this.distanceX, this.distanceY);
            }
        }
        if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
            // 开始拖动
            this.distanceX = 0;
            this.distanceY = 0;
        }


        super.onScrollStateChanged(recyclerView, newState);
    }

    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        this.distanceX += dx;
        this.distanceY += dy;

        if (onDraggingListener != null) {
            onDraggingListener.onDragging(this.distanceX, this.distanceY);
        }
        if (dy > 0 && !recyclerView.canScrollVertically(1) && onScrollToBottomListener != null) {
            onScrollToBottomListener.onScrollToBottom();
        }
    }

    public void setOnDraggedListener(OnDraggedListener onDraggedListener) {
        this.onDraggedListener = onDraggedListener;
    }

    public void setOnDraggingListener(OnDraggingListener onDraggingListener) {
        this.onDraggingListener = onDraggingListener;
    }

    public void setOnScrollToBottomListener(OnScrollToBottomListener onScrollToBottomListener) {
        this.onScrollToBottomListener = onScrollToBottomListener;
    }

    public interface OnDraggedListener {
        /**
         * 拖动结束
         *
         * @param dx x方向的总距离
         * @param dy y方向的总距离
         */
        void onDragged(int dx, int dy);
    }

    public interface OnScrollToBottomListener {
        /**
         * 已滚动到底部
         *
         * @param dx x方向的总距离
         * @param dy y方向的总距离
         */
        void onScrollToBottom();
    }


    public interface OnDraggingListener {
        /**
         * 正在拖动
         *
         * @param dx 目前x方向的总距离
         * @param dy 目前y方向的总距离
         */
        void onDragging(int dx, int dy);
    }

}
